package service;

import java.util.Date;
import java.util.List;
import entity.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import dao.ProductDao;

@Service
public class ProductService {
    @Autowired
    private ProductDao productDao;

    /**
     * 展示所有商品
     *
     * @return 商品列表
     */
    public List<Product> showProduct() {
        return productDao.showProduct();
    }

    /**
     * 展示所有采购记录
     * @return 所有采购记录
     */
    public List<Purchase> showPurchaseRecord(){return productDao.showPurchaseRecord();}

    /**
     * 展示所有销售记录
     * @return 所有销售记录
     */
    public List<Sell> showSellRecord(){return productDao.showSellRecord();}

    /**
     * 根据供应商编号查询商品编号
     *
     * @return 商品编号列表
     */
    public List<Integer> selectProductIdBySupplierId(int id) {
        return productDao.selectProductIdBySupplierId(id);
    }

    /**
     * 展示所有商品库存
     *
     * @return 商品库存列表
     */
    public List<Inventory> showInventory() {
        return productDao.showInventory();
    }

    /**
     * 展示所有商品供应商
     *
     * @return 商品供应商列表
     */
    public List<Supplier> showSupplier() {
        return productDao.showSupplier();
    }

    /**
     * 添加商品
     *
     * @param product_name   商品名
     * @param specification  规格型号
     * @param purchase_price 进价
     * @param selling_price  单价
     * @param unit           单位
     * @param createTime     创建时间
     * @return 添加结果（true/false）
     */
    public MsgResult insertProduct(String product_name, String specification, double purchase_price, double selling_price, String unit, String supplier_name, Date createTime) {
        Product product = new Product();
        product.setProduct_name(product_name);
        product.setSpecification(specification);
        product.setPurchase_price(purchase_price);
        product.setSelling_price(selling_price);
        product.setUnit(unit);
        product.setSupplier_name(supplier_name);
        product.setCreateTime(createTime);
        boolean result = productDao.insertProduct(product);
        MsgResult msgResult = new MsgResult();

        if (result) {
            System.out.println("r1");
            msgResult.setContent(product.getProduct_id());
        }
        System.out.println("r2");
        return msgResult;
    }

    /**
     * 添加商品
     *
     * @param product_name   商品名
     * @param specification  规格型号
     * @param purchase_price 进价
     * @param selling_price  单价
     * @param unit           单位
     * @param createTime     创建时间
     * @return 添加结果（true/false）
     */
    public boolean insertProductWithPicture(String product_name, String specification, double purchase_price, double selling_price, String unit, Date createTime, String photo) {
        Product product = new Product();
        product.setProduct_name(product_name);
        product.setSpecification(specification);
        product.setPurchase_price(purchase_price);
        product.setSelling_price(selling_price);
        product.setUnit(unit);
        product.setCreateTime(createTime);
        product.setPhoto(photo);
        boolean result = productDao.insertProduct(product);
        if (result) {
            System.out.println("r1");
            return true;
        }
        System.out.println("r2");
        return false;
    }

    /**
     * 商品删除
     *
     * @param id 商品编号
     * @return 删除结果
     */

    public boolean deleteProduct(int id) {
        return productDao.deleteProduct(id);
    }

    /**
     * 供应商删除
     * @param id 供应商id
     * @return 返回是否删除成功
     */
    public boolean deleteSupplier(int id) {
    return productDao.deleteSupplier(id);
    }

    /**
     * 商品修改
     *
     * @param product 商品实体
     * @return 修改结果
     */
    public boolean updateProduct(Product product) {
        boolean result = productDao.updateProduct(product);
        if (result) {
            System.out.println("r1");
            return true;
        }
        System.out.println("r2");
        return false;
    }

    /**
     * 供货商修改
     *
     * @param supplier 供货商实体
     * @return 修改结果
     */
    public boolean updateSupplier(Supplier supplier) {
        boolean result = productDao.updateSupplier(supplier);
        if (result) {
            System.out.println("r1");
            return true;
        }
        System.out.println("r2");
        return false;
    }

    /**
     * 根据商品id查询商品数据
     *
     * @param id 商品编号
     * @return 商品实体
     */
    public Product selectProductById(int id) {
        return productDao.selectProductById(id);
    }

    /**
     * 根据商品id查询供应商id
     *
     * @param id 商品编号
     * @return 供应商id
     */
    public int selectSupplierIdByProductId(int id) {
        return productDao.selectSupplierIdByProductId(id);
    }

    /**
     * 根据供应商id查询其供应商数据
     *
     * @param id 供应商编号
     * @return 供应商数据
     */
    public Supplier selectSupplierBySupplierId(int id) {
        return productDao.selectSupplierBySupplierId(id);
    }

    /**
     * 商品库存
     *
     * @param inventory 库存实体
     * @return 修改结果
     */
    public boolean updateInventory(Inventory inventory) {
        boolean result = productDao.updateInventory(inventory);
        if (result) {
            System.out.println("r1");
            return true;
        }
        System.out.println("r2");
        return false;
    }

    /**
     * 添加商品和供应商对应关系
     *
     * @param productAndSupplierRelation 对应关系实体
     * @return 是否成功
     */
    public boolean insertProductAndSupplierRelation(ProductAndSupplierRelation productAndSupplierRelation) {
        boolean result = productDao.insertProductAndSupplierRelation(productAndSupplierRelation);
        if (result) {
            System.out.println("r1");
            return true;
        }
        System.out.println("r2");
        return false;
    }

    /**
     * 添加商品进入库存
     *
     * @param inventory 库存实体
     * @return 是否成功
     */
    public boolean insertProductInInventory(Inventory inventory) {
        boolean result = productDao.insertProductInInventory(inventory);
        if (result) {
            System.out.println("r1");
            return true;
        }
        System.out.println("r2");
        return false;
    }

    /**
     * 根据商品id查询库存信息
     * @param id 商品编号
     * @return 库存信息
     */
    public Inventory selectInventoryById(int id) {
        return productDao.selectInventoryById(id);
    }

    /**
     * 新增商品供应商
     * @param supplier 供应商实体
     * @return 是否成功
     */
    public boolean insertSupplier (Supplier supplier){
        return productDao.insertSupplier(supplier);
    }

    /**
     * 根据供应商名删除其在商品表中的所有相关商品
     * @param supplier 供应商实体
     * @return 是否成功
     */
    public boolean deleteProductBySupplierName(Supplier supplier){
        return productDao.deleteProductBySupplierName(supplier);
    }

    /**
     * 采购单添加
     * @param purchase 采购单实体
     * @return 添加结果
     */
    public boolean insertProduct_purchase(Purchase purchase){
        return productDao.insertProduct_purchase(purchase);
    }

    /**
     * 销售单添加
     * @param sell 销售单实体
     * @return 添加结果
     */
    public boolean insertProduct_sell(Sell sell){
        return productDao.insertProduct_sell(sell);
    }

    /**
     * 删除采购记录
     * @param id 采购编号
     * @return 删除结果
     */
    public boolean deletePurchaseRecord(int id) {
        return productDao.deletePurchaseRecord(id);
    }

    /**
     * 删除销售记录
     * @param id 销售编号
     * @return 删除结果
     */
    public boolean deleteSellRecord(int id){
        return productDao.deleteSellRecord(id);
    }
}
